package thread;

//线程等待
public class Demo10 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("t线程工作中");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        //工作过程：
        //1.如果t线程正在运行中，此时调用join的线程就会阻塞，一直阻塞到t线程执行结束为止
        //2.如果t线程未运行，此时调用join线程就直接返回不会涉及到阻塞
        //实际开发中一般不建议死等，最好有"超时时间"
        t1.start();
        System.out.println("主线程等待中");
        t1.join();
        System.out.println("主线程等待结束");
        //线程休眠
        //sleep里面的时间并不是百分百准确的, 设定的实践到之后系统会唤醒这个线程(阻塞 -> 就绪)调度也需要时间开销，并不是sleep执行完就立即执行
    }
}
